package com.day240701.filter;

import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebFilter(filterName = "VisitTeacherFilter", value = "/teacher/*")
public class VisitTeacherFilter implements Filter {
    public void init(FilterConfig config) throws ServletException {
    }

    public void destroy() {
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        System.out.println("教师访问过滤器...");
        // 把两个参数 进行 “向下转型” ServletRequest ServletResponse 好多方法没有，只能通过转型，得到它的子类
        HttpServletRequest hsRequest = (HttpServletRequest) request;
        HttpServletResponse hsResponse = (HttpServletResponse) response;
        // 获得请求路径
        String uri = hsRequest.getRequestURI();

        System.out.println("URI:" + uri);
        // 判断 路径 后缀是否为 login.jsp
        if (uri.endsWith("login.jsp")) {
            // 如果后缀是 login.jsp 就放行
            chain.doFilter(request, response); // 放行，让它去下一个目的地
            return; // 防止后面再执行后续代码
        }
        // 再次判断一下，如果请求参数 op 值为 login，说明它准备去登录，也要放行
        String op = hsRequest.getParameter("op");
        if ("login".equals(op)) {
            chain.doFilter(request, response);
            return;
        }
        // 其他的请求（路径带 teacher）都要进行权限控制（判断是否 session 中有 tNo，有则说明已登录状态）
        HttpSession session = hsRequest.getSession();
        Integer tNo = (Integer) session.getAttribute("tNo");
        if (tNo != null) {
            // 有登录过，继续前进
            chain.doFilter(request, response);
        } else {
            session.setAttribute("msg", "请先登录后，再访问！");
            hsResponse.sendRedirect("../teacher/login.jsp");
        }

    }
}
